|
| | ProcessorMotion (const std::string &_type, TypeComposite _state_types, SizeEigen _state_size, SizeEigen _delta_size, SizeEigen _delta_cov_size, SizeEigen _data_size, SizeEigen _calib_size, const YAML::Node &_params) |
| |
| | ~ProcessorMotion () override |
| |
| virtual void | resetDerived () |
| |
| TimeStamp | getTimeStamp () const override |
| | Get the timestamp of the last motion. More...
|
| |
| VectorComposite | getState (StateKeys _keys="") const override |
| | Get the state at the last time. More...
|
| |
| VectorComposite | getState (const TimeStamp &_ts, StateKeys _keys="") const override |
| | Get the state at a specific time. More...
|
| |
| const Eigen::MatrixXd | getCurrentDeltaPreintCov () const |
| | Gets the delta preintegrated covariance from all integrations so far. More...
|
| |
| Motion | getMotion () const |
| | Provide the motion integrated so far. More...
|
| |
| Motion | getMotion (const TimeStamp &_ts) const |
| | Provide the motion integrated until a given timestamp. More...
|
| |
| CaptureMotionConstPtr | findCaptureContainingTimeStamp (const TimeStamp &_ts) const |
| | Finds the capture that contains the closest previous motion of _ts. More...
|
| |
| CaptureMotionPtr | findCaptureContainingTimeStamp (const TimeStamp &_ts) |
| |
| void | setOrigin (FrameBasePtr _origin_frame) |
| |
| FrameBasePtr | setOrigin (const VectorComposite &_x_origin, const TimeStamp &_ts_origin) |
| |
| MotionBuffer & | getBuffer () |
| |
| const MotionBuffer & | getBuffer () const |
| |
| virtual void | computeCurrentDelta (const Eigen::VectorXd &_data, const Eigen::MatrixXd &_data_cov, const Eigen::VectorXd &_calib, const double _dt, Eigen::VectorXd &_delta, Eigen::MatrixXd &_delta_cov, Eigen::MatrixXd &_jacobian_calib) const =0 |
| | convert raw CaptureMotion data to the delta-state format More...
|
| |
| virtual void | deltaPlusDelta (const Eigen::VectorXd &_delta1, const Eigen::VectorXd &_delta2, const double _dt2, Eigen::VectorXd &_delta1_plus_delta2) const =0 |
| | composes a delta-state on top of another delta-state More...
|
| |
| virtual void | deltaPlusDelta (const Eigen::VectorXd &_delta1, const Eigen::VectorXd &_delta2, const double _dt2, Eigen::VectorXd &_delta1_plus_delta2, Eigen::MatrixXd &_jacobian1, Eigen::MatrixXd &_jacobian2) const =0 |
| | composes a delta-state on top of another delta-state, and computes the Jacobians More...
|
| |
| virtual void | statePlusDelta (const VectorComposite &_x, const Eigen::VectorXd &_delta, const double _dt, VectorComposite &_x_plus_delta) const =0 |
| | composes a delta-state on top of a state More...
|
| |
| virtual Eigen::VectorXd | deltaZero () const =0 |
| | Delta zero. More...
|
| |
| virtual Eigen::VectorXd | correctDelta (const Eigen::VectorXd &delta_preint, const Eigen::VectorXd &delta_step) const =0 |
| | correct the preintegrated delta This produces a delta correction according to the appropriate manifold. More...
|
| |
| void | mergeCaptures (CaptureMotionPtr cap_prev, CaptureMotionPtr cap_target) |
| | merge two consecutive capture motions into the second one Merge two consecutive capture motions into the second one. The first capture motion is not removed. If the second capture has feature and factor emplaced, they are replaced by a new ones. More...
|
| |
| virtual Eigen::VectorXd | getCalibration (const CaptureBaseConstPtr _capture=nullptr) const =0 |
| |
| bool | hasCalibration () const |
| |
| CaptureMotionConstPtr | getOrigin () const |
| |
| CaptureMotionConstPtr | getLast () const |
| |
| CaptureMotionConstPtr | getIncoming () const |
| |
| CaptureMotionPtr | getOrigin () |
| |
| CaptureMotionPtr | getLast () |
| |
| CaptureMotionPtr | getIncoming () |
| |
| Eigen::MatrixXd | getUnmeasuredPerturbationCov () const |
| |
| double | getMaxTimeSpan () const |
| |
| double | getMaxBuffLength () const |
| |
| double | getMaxDistTraveled () const |
| |
| double | getMaxAngleTurned () const |
| |
| void | setMaxTimeSpan (const double &_max_time_span) |
| |
| void | setMaxBuffLength (const double &_max_buff_length) |
| |
| void | setMaxDistTraveled (const double &_max_dist_traveled) |
| |
| void | setMaxAngleTurned (const double &_max_angle_turned) |
| |
| void | printHeader (int depth, bool factored_by, bool metric, bool state_blocks, std::ostream &stream, std::string _tabs="") const override |
| |
| void | startCaptureProfiling () |
| |
| void | stopCaptureProfiling () |
| |
| void | startKFProfiling () |
| |
| void | stopKFProfiling () |
| |
| virtual void | printProfiling (std::ostream &stream=std::cout) const |
| |
| | ProcessorBase (const std::string &_type, const TypeComposite &_state_types, const YAML::Node &_params) |
| | constructor More...
|
| |
| | ~ProcessorBase () override |
| |
| virtual void | configure (SensorBasePtr _sensor)=0 |
| |
| virtual void | remove () |
| |
| bool | hasChildren () const override |
| |
| const TypeComposite & | getStateTypes () const |
| |
| StateKeys | getStateKeys () const |
| |
| unsigned int | id () const |
| |
| void | keyFrameCallback (FrameBasePtr _keyframe) |
| | notify a new keyframe made by another processor More...
|
| |
| void | captureCallback (CaptureBasePtr _capture) |
| | notify a new capture More...
|
| |
| SensorBaseConstPtr | getSensor () const |
| |
| SensorBasePtr | getSensor () |
| |
| YAML::Node | getParams () const |
| |
| bool | isMotionProvider () const |
| |
| bool | applyLossFunction () const |
| |
| bool | isVotingActive () const |
| |
| double | getTimeTolerance () const |
| |
| void | setApplyLossFunction (bool _apply_loss_function) |
| |
| void | setVotingActive (bool _voting_active) |
| |
| void | setTimeTolerance (double _time_tolerance) |
| |
| void | setDebugVerboseLevel (const std::string &_debug_verbose_level) |
| |
| std::string | getDebugVerboseLevel () const |
| |
| bool | checkTimeTolerance (const TimeStamp &_ts1, const TimeStamp &_ts2) const |
| |
| bool | checkTimeTolerance (const CaptureBasePtr _cap, const TimeStamp &_ts) const |
| |
| bool | checkTimeTolerance (const FrameBasePtr _frm, const TimeStamp &_ts) const |
| |
| bool | checkTimeTolerance (const FrameBasePtr _frm, const CaptureBasePtr _cap) const |
| |
| virtual void | link (SensorBasePtr) final |
| |
| virtual void | printHeader (int depth, bool factored_by, bool metric, bool state_blocks, std::ostream &stream, std::string _tabs="") const |
| |
| void | print (int depth, bool factored_by, bool metric, bool state_blocks, std::ostream &stream=std::cout, std::string _tabs="") const |
| |
| virtual CheckLog | localCheck (bool _verbose, std::ostream &_stream, std::string _tabs="") const |
| |
| bool | check (CheckLog &_log, bool _verbose, std::ostream &_stream, std::string _tabs="") const |
| |
| | NodeBase (const std::string &_category, const std::string &_type="Undefined", const std::string &_name="") |
| |
| virtual | ~NodeBase ()=default |
| |
| unsigned int | nodeId () const |
| |
| std::string | getCategory () const |
| |
| std::string | getType () const |
| |
| std::string | getName () const |
| |
| bool | isRemoving () const |
| |
| virtual bool | hasChildren () const =0 |
| |
| void | setType (const std::string &_type) |
| |
| void | setName (const std::string &_name) |
| |
| ProblemConstPtr | getProblem () const |
| |
| ProblemPtr | getProblem () |
| |
| | MotionProvider (const TypeComposite &_state_types, const YAML::Node &_params) |
| | Constructor for the MotionProvider class. More...
|
| |
| virtual | ~MotionProvider () |
| | Destructor for the MotionProvider class. More...
|
| |
| virtual TimeStamp | getTimeStamp () const =0 |
| | Get the timestamp of the last motion. More...
|
| |
| virtual VectorComposite | getState (StateKeys _keys="") const =0 |
| | Get the state at the last time. More...
|
| |
| virtual VectorComposite | getState (const TimeStamp &_ts, StateKeys _keys="") const =0 |
| | Get the state at a specific time. More...
|
| |
| VectorComposite | getOdometry () const |
| | Get the odometry. More...
|
| |
| void | setOdometry (const VectorComposite &) |
| | Set the odometry. More...
|
| |
| bool | isStateProvider () const |
| | Check if the motion provider is configured as a state provider. More...
|
| |
| unsigned int | getOrder () const |
| | Get the order of the state provider. More...
|
| |
| void | setOrder (unsigned int) |
| | Set the order of the state provider. More...
|
| |
|
| void | processCapture (CaptureBasePtr) override |
| | process an incoming capture More...
|
| |
| void | processKeyFrame (FrameBasePtr _keyframe_ptr) override |
| | process an incoming key-frame More...
|
| |
| bool | triggerInCapture (CaptureBasePtr) const override |
| | trigger in capture More...
|
| |
| bool | triggerInKeyFrame (FrameBasePtr _keyframe_ptr) const override |
| | trigger in key-frame More...
|
| |
| bool | storeKeyFrame (FrameBasePtr) override |
| | store key frame More...
|
| |
| bool | storeCapture (CaptureBasePtr) override |
| | store capture More...
|
| |
| bool | voteForKeyFrame () const override |
| | Vote for KeyFrame generation. More...
|
| |
| double | updateDt () |
| |
| void | integrateOneStep () |
| | Make one step of motion integration. More...
|
| |
| void | reintegrateBuffer (CaptureMotionPtr _capture_ptr) const |
| |
| void | splitBuffer (const wolf::CaptureMotionPtr &capture_source, const TimeStamp ts_split, const wolf::CaptureMotionPtr &capture_target) const |
| |
| virtual void | preProcess () |
| |
| virtual void | bootstrap () |
| | Bootstrap the processor with some initialization steps. More...
|
| |
| virtual void | postProcess () |
| |
| FrameBasePtr | computeProcessingStep () |
| |
| void | assertsCaptureMotion (CaptureMotionPtr _capture, std::string error_prefix) const |
| |
| virtual CaptureMotionPtr | emplaceCapture (const FrameBasePtr &_frame_own, const SensorBasePtr &_sensor, const TimeStamp &_ts, const Eigen::VectorXd &_data, const Eigen::MatrixXd &_data_cov, const Eigen::VectorXd &_calib, const Eigen::VectorXd &_calib_preint, const CaptureBasePtr &_capture_origin_ptr)=0 |
| | emplace a CaptureMotion More...
|
| |
| virtual void | emplaceFeaturesAndFactors (CaptureBasePtr _capture_origin, CaptureMotionPtr _capture_own)=0 |
| | emplace the features and factors corresponding to given capture and link them to the capture More...
|
| |
| virtual void | setCalibration (const CaptureBasePtr _capture, const Eigen::VectorXd &_calibration)=0 |
| |
| Motion | motionZero (const TimeStamp &_ts) const |
| |
| virtual void | processCapture (CaptureBasePtr)=0 |
| | process an incoming capture More...
|
| |
| virtual void | processKeyFrame (FrameBasePtr _keyframe_ptr)=0 |
| | process an incoming key-frame More...
|
| |
| virtual bool | triggerInCapture (CaptureBasePtr) const =0 |
| | trigger in capture More...
|
| |
| virtual bool | triggerInKeyFrame (FrameBasePtr) const =0 |
| | trigger in key-frame More...
|
| |
| virtual bool | storeKeyFrame (FrameBasePtr)=0 |
| | store key frame More...
|
| |
| virtual bool | storeCapture (CaptureBasePtr)=0 |
| | store capture More...
|
| |
| virtual bool | voteForKeyFrame () const =0 |
| | Vote for KeyFrame generation. More...
|
| |
| virtual bool | permittedKeyFrame () const final |
| |
| void | setProblem (ProblemPtr) override |
| |
| void | addTypes (const TypeComposite &) |
| | add state types More...
|
| |
| virtual void | setProblem (ProblemPtr _prob_ptr) |
| |
| void | addTypes (const TypeComposite &_state_types) |
| | Add types to the motion provider. More...
|
| |
class for Motion processors
This processor integrates motion data into vehicle states.
The motion data is provided by the sensor owning this processor.
This data is, in the general case, in the reference frame of the sensor:
- Beware of the frame transformations Map to Robot, and Robot to Sensor, so that your produced motion Factors are correctly expressed.
- The robot state R is expressed in a global or 'Map' reference frame, named M.
- The sensor frame S is expressed in the robot frame R.
- The motion data data_ is expressed in the sensor frame S.
- You can use three basic methods for this:
- The trivial: make the sensor frame and the robot frame the same frame, that is, S = Id.
- Transform incoming data from sensor frame to robot frame, and then integrate motion in robot frame.
- Integrate motion directly in sensor frame, and transform to robot frame at the time of:
- Publishing the robot state (see getCurrentState() and similar functions)
- Creating Keyframes and Factors (see emplaceFactor() ).
Should you need extra functionality for your derived types, you can overload these two methods,
which are called at the beginning and at the end of process(). See the doc of these functions for more info.
| virtual void wolf::ProcessorMotion::computeCurrentDelta |
( |
const Eigen::VectorXd & |
_data, |
|
|
const Eigen::MatrixXd & |
_data_cov, |
|
|
const Eigen::VectorXd & |
_calib, |
|
|
const double |
_dt, |
|
|
Eigen::VectorXd & |
_delta, |
|
|
Eigen::MatrixXd & |
_delta_cov, |
|
|
Eigen::MatrixXd & |
_jacobian_calib |
|
) |
| const |
|
pure virtual |
convert raw CaptureMotion data to the delta-state format
This function accepts raw data and time step dt, and computes the value of the delta-state and its covariance. Note that these values are held by the members delta_ and delta_cov_.
- Parameters
-
| _data | measured motion data |
| _data_cov | covariance |
| _dt | time step |
| _delta | computed delta |
| _delta_cov | covariance |
| _calib | current state of the calibrated parameters |
| _jacobian_calib | Jacobian of the delta wrt calib |
Rationale:
The delta-state format must be compatible for integration using the composition functions doing the math in this class: statePlusDelta() and deltaPlusDelta(). See the class documentation for some Eigen::VectorXd suggestions.
The data format is generally not the same as the delta format, because it is the format of the raw data provided by the Capture, which is unaware of the needs of this processor.
Additionally, sometimes the data format is in the form of a velocity, or a higher derivative, while the delta is in the form of an increment. In such cases, converting from data to delta-state needs integrating the data over the period dt.
Two trivial implementations would establish:
- If
_data is an increment: delta_ = _data;
delta_cov_ = _data_cov
If _data is a velocity:
delta_ = _data * _dt
delta_cov_ = _data_cov * _dt.
However, other more complicated relations are possible. In general, we'll have a nonlinear function relating delta_ to _data and _dt, as follows:
delta_ = f ( _data, _dt)
The delta covariance is obtained by classical uncertainty propagation of the data covariance, that is, through the Jacobians of f(),
delta_cov_ = F_data * _data_cov * F_data.transpose
where F_data = d_f/d_data is the Jacobian of f().
Implemented in wolf::ProcessorDiffDrive, wolf::ProcessorOdom2d, and wolf::ProcessorOdom3d.